﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Configuration;
using log4net;
using System.Data.SqlClient;
using System.Web.Configuration;
using TheBullysStore.Models.ModuloAdministracion.Departamento;
using TheBullysStore.Models.ModuloAdministracion.Edificio;

namespace TheBullysStore.Models.ModuloAdministracion.Usuario
{
    public class UsuarioDAO
    {
        private static ILog log = LogManager.GetLogger(typeof(UsuarioDAO));
        public string RegistrarUsuario(UsuarioBean usuario)
        {

            SqlConnection sqlCon = null;
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;
                 sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString4 = "select nombre from edificio where id_edificio=" + usuario.IdEdificio + " ";

                SqlCommand sqlCmd4 = new SqlCommand(commandString4, sqlCon);

                SqlDataReader dataReader2 = sqlCmd4.ExecuteReader();

                UsuarioBean usuario3 = new UsuarioBean();

                if (dataReader2.Read())
                {
                    usuario3.Edificio = Convert.ToString(dataReader2["nombre"]);

                }

                sqlCon.Close();

                sqlCon.Open();

                string commandString = "INSERT INTO persona (nombres, apellidos,direccion,id_distrito,telefono,celular,correo,genero,estado,nro_documento_persona,tipo_documento, usuario, password, Id_Cargo, id_edificio, edificio, id_departamento, id_provincia) VALUES ('" + usuario.Nombre + "', '" + usuario.Apellidos + "', '" + usuario.Direccion + "', " + usuario.Distrito + ", '" + usuario.Telefono + "', '" + usuario.Celular + "', '" + usuario.Correo + "', '" + usuario.Genero + "', 1 , '" + usuario.NroDocumentoPersona + "', '" + usuario.TipoDocumento + "', '" + usuario.User + "', '" + usuario.Password + "', " + usuario.IdCargo + ", " +usuario.IdEdificio + ", '" +usuario3.Edificio + "', "+usuario.Departamento+ ", " + usuario.Provincia + " )";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                usuario.Conexion = "Bien";
            }
            catch (Exception ex)
            {
                log.Error("registrarUsuario(EXCEPTION): ", ex);
                throw ex;
            }

            return usuario.Conexion;
        }

        public string RegistrarPersonal(PersonalBean personal)
        {
            SqlConnection sqlCon = null;
            try
            {
            
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString4 = "select nombre from edificio where id_edificio=" + personal.IdEdificio + " ";

                SqlCommand sqlCmd4 = new SqlCommand(commandString4, sqlCon);

                SqlDataReader dataReader2 = sqlCmd4.ExecuteReader();

                PersonalBean personal3 = new PersonalBean();

                if (dataReader2.Read())
                {
                    personal3.Edificio = Convert.ToString(dataReader2["nombre"]);

                }

                sqlCon.Close();
                sqlCon.Open();

                string commandString = "INSERT INTO persona (nombres, apellidos,direccion,id_distrito,telefono,celular,correo,genero,estado,nro_documento_persona,tipo_documento, usuario, password, Id_Cargo, id_edificio, edificio, id_departamento, id_provincia) VALUES ('" + personal.Nombre + "', '" + personal.Apellidos + "', '" + personal.Direccion + "', " + personal.Distrito + ", '" + personal.Telefono + "', '" + personal.Celular + "', '" + personal.Correo + "', '" + personal.Genero + "', 1 , '" + personal.NroDocumentoPersona + "', '" + personal.TipoDocumento + "', '" + personal.User + "', '" + personal.Password + "', " + personal.IdCargo + ", " +personal.IdEdificio + ", '" +personal3.Edificio + "', " + personal.Departamento + ", " +personal.Provincia + " )";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                sqlCon.Open();

                string commandString2 = "select max(id_persona) from persona";

                SqlCommand sqlCmd2 = new SqlCommand(commandString2, sqlCon);

                SqlDataReader dataReader = sqlCmd2.ExecuteReader();

                PersonalBean personal2 = new PersonalBean();

                if (dataReader.Read())
                {
                    personal2.IdPersona = Convert.ToInt32(dataReader[0]);

                }

                sqlCon.Close();

                sqlCon.Open();

                string commandString3 = "INSERT INTO personal (id_seguro, sueldo, id_personal) values (" + personal.IdSeguro + ", " + personal.Sueldo + ", " + personal2.IdPersona + ")";

                SqlCommand sqlCmd3 = new SqlCommand(commandString3, sqlCon);

                sqlCmd3.ExecuteNonQuery();

                sqlCon.Close();

                personal.Conexion = "Bien";
            }
            catch (Exception ex)
            {
                log.Error("registrarPersonal(EXCEPTION): ", ex);
                throw ex;
            }

            return personal.Conexion;
        }

        public string RegistrarVendedor(VendedorBean vendedor)
        {
            SqlConnection sqlCon = null;
            try
            {

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString4 = "select nombre from edificio where id_edificio=" + vendedor.IdEdificio + " ";

                SqlCommand sqlCmd4 = new SqlCommand(commandString4, sqlCon);

                SqlDataReader dataReader2 = sqlCmd4.ExecuteReader();

                VendedorBean vendedor3 = new VendedorBean();

                if (dataReader2.Read())
                {
                    vendedor3.Edificio = Convert.ToString(dataReader2["nombre"]);

                }

                sqlCon.Close();

                sqlCon.Open();

                string commandString = "INSERT INTO persona (nombres, apellidos,direccion,id_distrito,telefono,celular,correo,genero,estado,nro_documento_persona,tipo_documento, usuario, password, Id_Cargo, id_edificio, edificio, id_departamento, id_provincia) VALUES ('" + vendedor.Nombre + "', '" + vendedor.Apellidos + "', '" + vendedor.Direccion + "', " + vendedor.Distrito + ", '" + vendedor.Telefono + "', '" + vendedor.Celular + "', '" + vendedor.Correo + "', '" + vendedor.Genero + "', 1 , '" + vendedor.NroDocumentoPersona + "', '" + vendedor.TipoDocumento + "', '" + vendedor.User + "', '" + vendedor.Password + "', " + vendedor.IdCargo + ", " +vendedor.IdEdificio + ", '" + vendedor3.Edificio + "', " +vendedor.Departamento+ ", " +vendedor.Provincia + " )";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                sqlCon.Open();

                string commandString2 = "select max(id_persona) from persona";

                SqlCommand sqlCmd2 = new SqlCommand(commandString2, sqlCon);

                SqlDataReader dataReader = sqlCmd2.ExecuteReader();

                VendedorBean vendedor2 = new VendedorBean();

                if (dataReader.Read())
                {
                    vendedor2.IdPersona = Convert.ToInt32(dataReader[0]);

                }

                sqlCon.Close();

                sqlCon.Open();

                string commandString3 = "INSERT INTO vendedor (id_vendedor) values ( " + vendedor2.IdPersona + ")";

                SqlCommand sqlCmd3 = new SqlCommand(commandString3, sqlCon);

                sqlCmd3.ExecuteNonQuery();

                sqlCon.Close();

                vendedor.Conexion = "Bien";
            }
            catch (Exception ex)
            {
                log.Error("registrarVendedor(EXCEPTION): ", ex);
                throw ex;
            }
            return vendedor.Conexion;
        }

        public string RegistrarCliente(ClienteBean cliente)
        {
            SqlConnection sqlCon = null;
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString4 = "select nombre from edificio where id_edificio= 2 ";

                SqlCommand sqlCmd4 = new SqlCommand(commandString4, sqlCon);

                SqlDataReader dataReader2 = sqlCmd4.ExecuteReader();

                ClienteBean cliente3 = new ClienteBean();

                if (dataReader2.Read())
                {
                    cliente3.Edificio = Convert.ToString(dataReader2["nombre"]);

                }

                sqlCon.Close();

                sqlCon.Open();

                string commandString = "INSERT INTO persona (nombres, apellidos,direccion,id_distrito,telefono,celular,correo,genero,estado,nro_documento_persona,tipo_documento, usuario, password, Id_Cargo, id_edificio, edificio, id_departamento, id_provincia) VALUES ('" + cliente.Nombre + "','" + cliente.Apellidos + "', '" + cliente.Direccion + "', '" + cliente.Distrito + "', " + cliente.Telefono + ", '" + cliente.Celular + "', '" + cliente.Correo + "', '" + cliente.Genero + "', 1 , '" + cliente.NroDocumentoPersona + "', '" + cliente.TipoDocumento + "', '" + cliente.User + "', '" + cliente.Password + "', " + cliente.IdCargo + ", 2, '" +cliente3.Edificio +"', " + cliente3.Departamento + ", " +cliente3.Provincia + ")";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                sqlCon.Open();

                string commandString2 = "select * from persona  where nro_documento_persona='" + cliente.NroDocumentoPersona + "' ";

                SqlCommand sqlCmd2 = new SqlCommand(commandString2, sqlCon);

                SqlDataReader dataReader = sqlCmd2.ExecuteReader();

                ClienteBean cliente2 = new ClienteBean();

                if (dataReader.Read())
                {
                    cliente2.IdPersona = Convert.ToInt32(dataReader["id_persona"]);

                }

                sqlCon.Close();

                sqlCon.Open();

                string commandString3 = "INSERT INTO cliente (id_cliente) values ( " + cliente2.IdPersona + ")";

                SqlCommand sqlCmd3 = new SqlCommand(commandString3, sqlCon);

                sqlCmd3.ExecuteNonQuery();

                sqlCon.Close();

                cliente.Conexion = "Bien";
            }
            catch (Exception ex)
            {
                log.Error("registrarCliente(EXCEPTION): ", ex);
                throw ex;
            }
            return cliente.Conexion;
        }

        public string RegistrarHabitante(HabitanteBean habitante)
        {
             SqlConnection sqlCon = null;
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);


                sqlCon.Open();

                string commandString4 = "select nombre from edificio where id_edificio=" + habitante.IdEdificio + " ";

                SqlCommand sqlCmd4 = new SqlCommand(commandString4, sqlCon);

                SqlDataReader dataReader2 = sqlCmd4.ExecuteReader();

                HabitanteBean habitante3 = new HabitanteBean();

                if (dataReader2.Read())
                {
                    habitante3.Edificio = Convert.ToString(dataReader2["nombre"]);

                }

                sqlCon.Close();
                
                sqlCon.Open();


                string commandString = "INSERT INTO persona (nombres, apellidos,direccion,id_distrito,telefono,celular,correo,genero,estado,nro_documento_persona,tipo_documento, usuario, password, Id_Cargo, id_edificio, edificio, id_departamento, id_provincia) VALUES ('" + habitante.Nombre + "', '" + habitante.Apellidos + "', '" + habitante.Direccion + "', " + habitante.Distrito + ", '" + habitante.Telefono + "', '" + habitante.Celular + "', '" + habitante.Correo + "', '" + habitante.Genero + "', 1 , '" + habitante.NroDocumentoPersona + "', '" + habitante.TipoDocumento + "', '" + habitante.User + "', '" + habitante.Password + "', " + habitante.IdCargo + ", " + habitante.IdEdificio+ ", '" + habitante3.Edificio +"', " + habitante.Departamento + ", " + habitante.Provincia + " )";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();
                    
                sqlCon.Open();

                string commandString2 = "select max(id_persona) from persona";

                SqlCommand sqlCmd2 = new SqlCommand(commandString2, sqlCon);

                SqlDataReader dataReader = sqlCmd2.ExecuteReader();

                HabitanteBean habitante2 = new HabitanteBean();

                if (dataReader.Read())
                {
                    habitante2.IdPersona = Convert.ToInt32(dataReader[0]);

                }

                sqlCon.Close();

                sqlCon.Open();

                if (habitante.EsInquilino == 1)
                {
                    habitante.EsPropietario = 2;
                }
                else
                {
                    habitante.EsPropietario = 1;
                }

                string commandString3 = "INSERT INTO habitante (es_inquilino, es_propietario, contacto, telefono_contacto, id_persona, id_departamento, tipo_formato, mascota, tipo_documento) values ( " + habitante.EsInquilino + ", " + habitante.EsPropietario + ", '" + habitante.Conyuge + "', '" + habitante.DniConyuge + "', " + habitante2.IdPersona + ", " +habitante.IdDepartamento + ", " + habitante.Formato +", "+ habitante.Mascota + ", '" + habitante.TipoDocumentoConyuge + "' )";

                SqlCommand sqlCmd3 = new SqlCommand(commandString3, sqlCon);

                sqlCmd3.ExecuteNonQuery();

                sqlCon.Close();

                habitante.Conexion = "Bien";
            }
            catch (Exception ex)
            {
                log.Error("registrarHabitante(EXCEPTION): ", ex);
                throw ex;
            }
            return habitante.Conexion;
        }

        public Boolean ExisteUsuario(string user)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT count(*)  FROM Persona WHERE estado=1 and usuario = '" + user + "' ";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                Int32 count = (Int32)sqlCmd.ExecuteScalar();

                if (count > 0)
                {
                    if (user==null) {
                        return false;
                    } else{
                    return true;
                    }
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                log.Error("existeUsuario(EXCEPTION): ", ex);
                throw ex;
            }
        }


        public Boolean EsSuPassword(string user, string password)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT count(*)  FROM Persona WHERE estado=1 and usuario = '" + user + "' and password='" + password + "' ";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                Int32 count = (Int32)sqlCmd.ExecuteScalar();

                if (count > 0)
                {
                    if (user == null)
                    {
                        return false;
                    }
                    else
                    {
                        return true;
                    }
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                log.Error("esSuPassword(EXCEPTION): ", ex);
                throw ex;
            }
        }

        public String CambiarPassword(UsuarioBean Usuario)
        {
             try
             {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "update Persona set password='" + Usuario.PasswordNuevo1 + "' where usuario='" + Usuario.User +"' and password='"+ Usuario.Password + "' ";

                SqlCommand sqlCmd0 = new SqlCommand(commandString, sqlCon);
                sqlCmd0.ExecuteNonQuery();

                sqlCon.Close();

                Usuario.Conexion = "Bien";
             }
             catch (Exception ex)
             {
                 log.Error("cambiarPassword(EXCEPTION): ", ex);
                 throw ex;
             }

             return Usuario.Conexion;

        }

        public Boolean TienePropietario(int idDpto)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT count(*)  FROM habitante a inner join (select z.* from persona z where z.estado=1) b on a.id_persona=b.id_persona WHERE a.es_propietario=1 and a.id_departamento= " + idDpto + " ";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                Int32 count = (Int32)sqlCmd.ExecuteScalar();

                if (count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                log.Error("tienePropietario(EXCEPTION): ", ex);
                throw ex;
            }
        }

        public Boolean TieneInquilino(int idDpto)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT count(*)  FROM habitante WHERE es_inquilino= 1 and id_departamento= " + idDpto + " ";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                Int32 count = (Int32)sqlCmd.ExecuteScalar();

                if (count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                log.Error("tieneInquilino(EXCEPTION): ", ex);
                throw ex;
            }
        }

        public Boolean MismoUsuario(string user, int idPersona)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT count(*)  FROM Persona WHERE estado=1 and usuario = '" + user + "' and id_persona= " + idPersona +" ";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                Int32 count = (Int32)sqlCmd.ExecuteScalar();

                if (count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                log.Error("mismoUsuario(EXCEPTION): ", ex);
                throw ex;
            }
        }

        public Boolean ExisteNroDocInquilino(string tipoDocumento, string nroDocumentoPersona)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT count(*)  FROM Persona a inner join (select * from habitante where es_inquilino=1) b on a.id_persona=b.id_persona WHERE a.estado=1 and a.tipo_documento = '" + tipoDocumento + "' AND a.nro_documento_persona = '" + nroDocumentoPersona + "' ";


                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                Int32 count = (Int32)sqlCmd.ExecuteScalar();

                if (count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                log.Error("existeNroDoc(EXCEPTION): ", ex);
                throw ex;
            }
        }

        public Boolean MismoNroDoc(string tipoDocumento, string nroDocumentoPersona, int idPersona)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT count(*)  FROM Persona WHERE estado=1 and tipo_documento = '" + tipoDocumento + "' AND nro_documento_persona = '" + nroDocumentoPersona + "' and id_persona= " + idPersona + " ";


                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                Int32 count = (Int32)sqlCmd.ExecuteScalar();

                if (count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                log.Error("mismoNroDoc(EXCEPTION): ", ex);
                throw ex;
            }
        }


        public List<UsuarioBean> ListarUsuario(UsuarioBean usuario0)
        {
            try
            {
            
                List<UsuarioBean> listaUsuario = new List<UsuarioBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
                sqlCon.Open();
                if (usuario0.Nombre == null)
                {
                    usuario0.Nombre = "";
                }
                if (usuario0.Apellidos == null)
                {
                    usuario0.Apellidos = "";
                }
                if (usuario0.NroDocumentoPersona == null)
                {
                    usuario0.NroDocumentoPersona = "";
                }
                if (usuario0.TipoDocumento == null)
                {
                    usuario0.TipoDocumento = "";
                }
                string commandString = "select p.id_persona, p.Nombres,p.Apellidos,p.Genero,p.tipo_documento,p.Nro_Documento_persona,p.Telefono,";
                commandString = commandString + " p.celular, p.Correo,p.id_departamento as 'departamento', p.id_provincia as 'provincia', p.id_distrito as 'distrito',p.Direccion,p.Id_Cargo,p.id_edificio,p.edificio as 'nombre_edificio',h.es_inquilino as 'es_inquilino',h.contacto as 'contacto',h.telefono_contacto as 'telefono_contacto', h.mascota as 'mascota', h.tipo_formato as 'tipo_formato', h.tipo_documento as 'tipo_documentoConyuge' , h.id_departamento as 'id_departamento', h.numero as 'numero_dep', ";
                commandString = commandString + " pl.Id_Seguro as 'id_seguro',pl.Sueldo as 'sueldo', g.descripcion as 'descripcion_cargo' from persona p";
                commandString = commandString + " left join (select z.*,x.numero as 'numero' from habitante z inner join departamento x on x.id_departamento=z.id_departamento) h on p.id_persona=h.id_persona left join personal pl on p.id_persona=pl.Id_Personal inner join cargo g on g.id_cargo=p.id_cargo where p.Estado=1";

                if (!usuario0.Apellidos.Equals(""))
                {
                    commandString = commandString + "  and UPPER(p.apellidos) LIKE '%" + usuario0.Apellidos.ToUpper() + "%' ";
                }

                if (!usuario0.Nombre.Equals(""))
                {
                    commandString = commandString + "  and UPPER(p.nombres) LIKE '%" + usuario0.Nombre.ToUpper() + "%' ";
                }

                if (!usuario0.NroDocumentoPersona.Equals(""))
                {
                    commandString = commandString + " and p.nro_documento_persona LIKE '%" + usuario0.NroDocumentoPersona + "%' ";
                }

                if (!usuario0.TipoDocumento.Equals(""))
                {
                    commandString = commandString + " and p.tipo_documento LIKE '%" + usuario0.TipoDocumento + "%' ";
                }

                if (usuario0.IdCargo > 0)
                {
                    commandString = commandString + " and p.Id_Cargo=" + usuario0.IdCargo + ""; //+" and ";
                }

                if (usuario0.IdEdificio > 0)
                {
                    commandString += " AND p.Id_edificio = " + usuario0.IdEdificio + "";
                }

                if (usuario0.IdDepartamento > 0)
                {
                    commandString += " AND h.id_departamento = " + usuario0.IdDepartamento + "";
                }
                
                if (usuario0.EsInquilino > 0)
                {
                    commandString += " AND h.es_inquilino = " + usuario0.EsInquilino + "";
                }


                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    UsuarioBean usuario = new UsuarioBean();
                    usuario.IdPersona = Convert.ToInt32(dataReader["id_persona"]);
                    if (!Convert.IsDBNull(dataReader["nombres"]))
                    {
                        usuario.Nombre = Convert.ToString(dataReader["nombres"]);
                    }
                    else
                    {
                        usuario.Nombre = "";
                    }
                    if (!Convert.IsDBNull(dataReader["apellidos"]))
                    {
                        usuario.Apellidos = Convert.ToString(dataReader["apellidos"]);
                    }
                    else
                    {
                        usuario.Apellidos = "";
                    }
                    usuario.Genero = Convert.ToString(dataReader["genero"]);
                    usuario.TipoDocumento = Convert.ToString(dataReader["tipo_documento"]);
                    usuario.NroDocumentoPersona = Convert.ToString(dataReader["nro_documento_persona"]);
                    if (!string.IsNullOrEmpty(Convert.ToString(dataReader["telefono"])))
                    {
                        usuario.Telefono = Convert.ToString(dataReader["telefono"]);
                    }
                    
                    if (!string.IsNullOrEmpty(Convert.ToString(dataReader["celular"])))
                    {
                        usuario.Celular = Convert.ToString(dataReader["celular"]);
                    }
                    if (!string.IsNullOrEmpty(Convert.ToString(dataReader["correo"])))
                    {
                        usuario.Correo = Convert.ToString(dataReader["correo"]);
                    }
                    usuario.Direccion = Convert.ToString(dataReader["direccion"]);
                    if (!Convert.IsDBNull(dataReader["departamento"]))
                    {
                        usuario.Departamento = Convert.ToInt32(dataReader["departamento"]);
                    }
                    if (!Convert.IsDBNull(dataReader["provincia"]))
                    {
                        usuario.Provincia = Convert.ToInt32(dataReader["provincia"]);
                    }
                    if (!Convert.IsDBNull(dataReader["distrito"]))
                    {
                        usuario.Distrito = Convert.ToInt32(dataReader["distrito"]);
                    }


                    if (!Convert.IsDBNull(dataReader["id_cargo"]))
                    {
                        usuario.IdCargo = Convert.ToInt32(dataReader["id_cargo"]);
                    }
                    
                    if (!Convert.IsDBNull(dataReader["descripcion_cargo"]))
                    {
                        usuario.DescripcionCargo = Convert.ToString(dataReader["descripcion_cargo"]);
                    }


                    if (!Convert.IsDBNull(dataReader["id_edificio"]))
                    {
                        usuario.IdEdificio = Convert.ToInt32(dataReader["id_edificio"]);
                    }
                    if (!Convert.IsDBNull(dataReader["nombre_edificio"]))
                    {
                        usuario.NombreEdificio = Convert.ToString(dataReader["nombre_edificio"]);
                        if (usuario.NombreEdificio == "nulo") { usuario.NombreEdificio = "----"; }
                    }
                    if (!Convert.IsDBNull(dataReader["id_departamento"]))
                    {
                        usuario.IdDepartamento = Convert.ToInt32(dataReader["id_departamento"]);
                    }
                    if (!Convert.IsDBNull(dataReader["numero_dep"]))
                    {
                        usuario.NumeroDepartamento = Convert.ToInt32(dataReader["numero_dep"]);
                    }
                    if (!Convert.IsDBNull(dataReader["es_inquilino"]))
                    {
                        usuario.EsInquilino = Convert.ToInt32(dataReader["es_inquilino"]);
                    }

                    if (!Convert.IsDBNull(dataReader["contacto"]))
                    {
                        usuario.Conyuge = Convert.ToString(dataReader["contacto"]);
                    }
                    if (!Convert.IsDBNull(dataReader["telefono_contacto"]))
                    {
                        usuario.DniConyuge = Convert.ToString(dataReader["telefono_contacto"]);
                    }
                    if (!Convert.IsDBNull(dataReader["mascota"]))
                    {
                        usuario.Mascota = Convert.ToInt32(dataReader["mascota"]);
                    }
                    if (!Convert.IsDBNull(dataReader["tipo_formato"]))
                    {
                        usuario.Formato = Convert.ToInt32(dataReader["tipo_formato"]);
                    }
                    if (!Convert.IsDBNull(dataReader["tipo_documentoConyuge"]))
                    {
                        usuario.TipoDocumentoConyuge = Convert.ToString(dataReader["tipo_documentoConyuge"]);
                    }
                    if (!Convert.IsDBNull(dataReader["sueldo"]))
                    {
                        usuario.Sueldo = Convert.ToDouble(dataReader["sueldo"]);
                    }
                    if (!Convert.IsDBNull(dataReader["id_seguro"]))
                    {
                        usuario.IdSeguro = Convert.ToInt32(dataReader["id_seguro"]);
                    }
                
                    listaUsuario.Add(usuario);
                }
                dataReader.Close();
                sqlCon.Close();

                return listaUsuario;
            }
            catch (Exception ex)
            {
                log.Error("listarUsuario(EXCEPTION): ", ex);
                throw ex;
            }
        }



        internal List<UsuarioBean> ListarUsuarioMod(UsuarioBean usuario)
        {
            try
            {
                List<UsuarioBean> listaUsuarios = new List<UsuarioBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
                sqlCon.Open();

                string commandString0 = "UPDATE dbo.persona SET Nombres = '" + usuario.Nombre + "',";
                commandString0 = commandString0 + "apellidos = '" + usuario.Apellidos + "',";
                commandString0 = commandString0 + "nro_documento_persona = '" + usuario.NroDocumentoPersona + "',";
                commandString0 = commandString0 + "tipo_documento = '" + usuario.TipoDocumento + "',";
                commandString0 = commandString0 + "correo = '" + usuario.Correo + "',";
                commandString0 = commandString0 + "telefono = '" + usuario.Telefono + "',";
                commandString0 = commandString0 + "celular = '" + usuario.Celular + "',";
                commandString0 = commandString0 + "genero = '" + usuario.Genero + "',";
                commandString0 = commandString0 + "direccion = '" + usuario.Direccion + "',";
                commandString0 = commandString0 + "Id_Cargo = " + usuario.IdCargo + ",";
                commandString0 = commandString0 + "id_distrito = " + usuario.Distrito + ",";
                commandString0 = commandString0 + "id_departamento = " + usuario.Departamento + ",";
                commandString0 = commandString0 + "id_provincia = " + usuario.Provincia + ",";
                commandString0 = commandString0 + "estado = " + usuario.Estado;
                commandString0 = commandString0 + " WHERE id_persona = " + usuario.IdPersona + "";
                SqlCommand sqlCmd0 = new SqlCommand(commandString0, sqlCon);
                sqlCmd0.ExecuteNonQuery();

                string commandString = "SELECT * FROM persona";
                commandString = commandString + " WHERE id_persona= " + usuario.IdPersona + "";
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    UsuarioBean usuario2 = new UsuarioBean();
                    usuario2.Nombre = Convert.ToString(dataReader["nombres"]);
                    usuario2.Apellidos = Convert.ToString(dataReader["apellidos"]);
                    usuario2.Genero = Convert.ToString(dataReader["genero"]);
                    usuario2.TipoDocumento = Convert.ToString(dataReader["tipo_documento"]);
                    usuario2.NroDocumentoPersona = Convert.ToString(dataReader["nro_documento_persona"]);
                    usuario2.Telefono = Convert.ToString(dataReader["telefono"]);
                    if (!string.IsNullOrEmpty(usuario2.Celular))
                    {
                        usuario2.Celular = Convert.ToString(dataReader["celular"]);
                    }
                    if (!string.IsNullOrEmpty(usuario2.Correo))
                    {
                        usuario2.Correo = Convert.ToString(dataReader["correo"]);
                    }
                    if (!string.IsNullOrEmpty(usuario2.Direccion))
                    {
                        usuario2.Direccion = Convert.ToString(dataReader["direccion"]);
                    }
                    if (usuario2.IdCargo > 0)
                    {
                        usuario2.IdCargo = Convert.ToInt32(dataReader["Id_Cargo"]);
                    }
                    if (usuario2.IdEdificio > 0)
                    {
                        usuario2.IdEdificio = Convert.ToInt32(dataReader["Id_Edificio"]);
                    }
                    if (usuario2.Departamento > 0)
                    {
                        usuario2.Departamento = Convert.ToInt32(dataReader["id_departamento"]);
                    }
                    if (usuario2.Provincia > 0)
                    {
                        usuario2.Provincia = Convert.ToInt32(dataReader["id_provincia"]);
                    }
                    if (usuario2.Distrito > 0)
                    {
                        usuario2.Distrito = Convert.ToInt32(dataReader["id_distrito"]);
                    }

                    listaUsuarios.Add(usuario2);
                }
                dataReader.Close();
                sqlCon.Close();

                return listaUsuarios;
            }
            catch (Exception ex)
            {
                log.Error("listarUsuarioMod(EXCEPTION): ", ex);
                throw ex;
            }
        }

        //Modificar personal

        internal List<PersonalBean> ListarPersonalMod(PersonalBean personal)
        {
            try
            {
            
                List<PersonalBean> listaUsuarios = new List<PersonalBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
                sqlCon.Open();

                string commandString4 = "SELECT count(*)  FROM Persona WHERE tipo_documento = '" + personal.TipoDocumento + "' AND nro_documento_persona = '" + personal.NroDocumentoPersona + "' and id_persona= " + personal.IdPersona + " ";
                SqlCommand sqlCmd4 = new SqlCommand(commandString4, sqlCon);
                Int32 count = (Int32)sqlCmd4.ExecuteScalar();

                if (count > 0)
                {
                    string commandString0 = "UPDATE dbo.persona SET Nombres = '" + personal.Nombre + "',";
                    commandString0 = commandString0 + "apellidos = '" + personal.Apellidos + "',";
                    commandString0 = commandString0 + "nro_documento_persona = '" + personal.NroDocumentoPersona + "',";
                    commandString0 = commandString0 + "tipo_documento = '" + personal.TipoDocumento + "',";
                    commandString0 = commandString0 + "correo = '" + personal.Correo + "',";
                    commandString0 = commandString0 + "telefono = '" + personal.Telefono + "',";
                    commandString0 = commandString0 + "celular = '" + personal.Celular + "',";
                    commandString0 = commandString0 + "genero = '" + personal.Genero + "',";
                    commandString0 = commandString0 + "direccion = '" + personal.Direccion + "',";
                    commandString0 = commandString0 + "Id_Cargo = " + personal.IdCargo + ",";
                    commandString0 = commandString0 + "Id_Edificio = " + personal.IdEdificio + ",";
                    commandString0 = commandString0 + "id_distrito = " + personal.Distrito + ",";
                    commandString0 = commandString0 + "id_departamento = " + personal.Departamento + ",";
                    commandString0 = commandString0 + "id_provincia = " + personal.Provincia + ",";
                    commandString0 = commandString0 + "estado = " + personal.Estado;
                    commandString0 = commandString0 + " WHERE id_persona = " + personal.IdPersona + "";
                    SqlCommand sqlCmd0 = new SqlCommand(commandString0, sqlCon);
                    sqlCmd0.ExecuteNonQuery();
                }

                sqlCon.Close();

                sqlCon.Open();

                string commandString1 = "UPDATE dbo.personal SET id_seguro = " + personal.IdSeguro + ",";
                commandString1 = commandString1 + "sueldo = " + personal.Sueldo + " ";
                commandString1 = commandString1 + " WHERE id_personal = " + personal.IdPersona + "";
                SqlCommand sqlCmd1 = new SqlCommand(commandString1, sqlCon);
                sqlCmd1.ExecuteNonQuery();

                sqlCon.Close();

                sqlCon.Open();

                string commandString = "SELECT a.nombres, a.apellidos, a.genero, a.tipo_documento, a.nro_documento_persona, a.telefono, a.celular, a.correo, a.id_departamento as 'departamento', a.id_provincia, a.id_distrito, ";
                commandString = commandString + " a.direccion, a.id_cargo, a.id_edificio, b.sueldo as 'sueldo', b.id_seguro as 'id_seguro' FROM persona a inner join personal b on a.id_persona=b.id_personal where a.id_persona=" + personal.IdPersona + " ";
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                if (dataReader.Read())
                {
                    PersonalBean usuario2 = new PersonalBean();
                    usuario2.Nombre = Convert.ToString(dataReader["nombres"]);
                    usuario2.Apellidos = Convert.ToString(dataReader["apellidos"]);
                    usuario2.Genero = Convert.ToString(dataReader["genero"]);
                    usuario2.TipoDocumento = Convert.ToString(dataReader["tipo_documento"]);
                    usuario2.NroDocumentoPersona = Convert.ToString(dataReader["nro_documento_persona"]);
                    usuario2.Telefono = Convert.ToString(dataReader["telefono"]);
                    usuario2.Celular = Convert.ToString(dataReader["celular"]);
                    usuario2.Correo = Convert.ToString(dataReader["correo"]);
                
                    if (Convert.ToInt32(dataReader["departamento"]) > 0)
                    {
                        usuario2.Departamento = Convert.ToInt32(dataReader["departamento"]);
                    }
                    if (Convert.ToInt32(dataReader["id_provincia"]) > 0)
                    {
                        usuario2.Provincia = Convert.ToInt32(dataReader["id_provincia"]);
                    }
                    if (Convert.ToInt32(dataReader["id_distrito"]) > 0)
                    {
                        usuario2.Distrito = Convert.ToInt32(dataReader["id_distrito"]);
                    }                {
                    usuario2.Direccion = Convert.ToString(dataReader["direccion"]);
                    }
                    if (Convert.ToInt32(dataReader["Id_Cargo"]) > 0)
                    {
                        usuario2.IdCargo = Convert.ToInt32(dataReader["Id_Cargo"]);
                    }

                    if (Convert.ToInt32(dataReader["Id_Edificio"]) > 0)
                    {
                        usuario2.IdEdificio = Convert.ToInt32(dataReader["Id_Edificio"]);
                    }
                
                    if (Convert.ToInt32(dataReader["sueldo"]) > 0)
                    {
                        usuario2.Sueldo = Convert.ToInt32(dataReader["sueldo"]);
                    }
                    if (Convert.ToInt32(dataReader["id_seguro"]) > 0)
                    {
                        usuario2.IdSeguro = Convert.ToInt32(dataReader["id_seguro"]);
                    }

                    listaUsuarios.Add(usuario2);
                }

                dataReader.Close();
                sqlCon.Close();

                return listaUsuarios;
            }
            catch (Exception ex)
            {
                log.Error("listarPersonalMod(EXCEPTION): ", ex);
                throw ex;
            }
        }

        //Modificar habitante

        internal List<HabitanteBean> ListarHabitanteMod(HabitanteBean habitante)
        {
            try
            {
                List<HabitanteBean> listaUsuarios = new List<HabitanteBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
                sqlCon.Open();

                string commandString4 = "SELECT count(*)  FROM Persona WHERE tipo_documento = '" + habitante.TipoDocumento + "' AND nro_documento_persona = '" + habitante.NroDocumentoPersona + "' and id_persona= " + habitante.IdPersona + " ";
                SqlCommand sqlCmd4 = new SqlCommand(commandString4, sqlCon);
                Int32 count = (Int32)sqlCmd4.ExecuteScalar();

                sqlCon.Close();

                sqlCon.Open();

                if (count > 0)
                {

                    string commandString0 = "UPDATE dbo.persona SET Nombres = '" + habitante.Nombre + "',";
                    commandString0 = commandString0 + "apellidos = '" + habitante.Apellidos + "',";
                    commandString0 = commandString0 + "nro_documento_persona = '" + habitante.NroDocumentoPersona + "',";
                    commandString0 = commandString0 + "tipo_documento = '" + habitante.TipoDocumento + "',";
                    commandString0 = commandString0 + "correo = '" + habitante.Correo + "',";
                    commandString0 = commandString0 + "telefono = '" + habitante.Telefono + "',";
                    commandString0 = commandString0 + "celular = '" + habitante.Celular + "',";
                    commandString0 = commandString0 + "genero = '" + habitante.Genero + "',";
                    commandString0 = commandString0 + "direccion = '" + habitante.Direccion + "',";
                    commandString0 = commandString0 + "Id_Cargo = " + habitante.IdCargo + ",";
                    commandString0 = commandString0 + "id_edificio = " + habitante.IdEdificio + ",";
                    commandString0 = commandString0 + "id_distrito = " + habitante.Distrito + ",";
                    commandString0 = commandString0 + "id_departamento = " + habitante.Departamento + ",";
                    commandString0 = commandString0 + "id_provincia = " + habitante.Provincia + ",";
                    commandString0 = commandString0 + "estado = " + habitante.Estado;
                    commandString0 = commandString0 + " WHERE id_persona = " + habitante.IdPersona + "";
                    SqlCommand sqlCmd0 = new SqlCommand(commandString0, sqlCon);
                    sqlCmd0.ExecuteNonQuery();
                }



                if (habitante.EsInquilino == 1)
                {
                    habitante.EsPropietario = 2;
                }
                else
                {
                    habitante.EsPropietario = 1;
                }

                sqlCon.Close();

                sqlCon.Open();

                string commandString1 = "UPDATE habitante SET es_inquilino = " + habitante.EsInquilino + ",";
                commandString1 = commandString1 + "es_propietario = " + habitante.EsPropietario + ",";
                commandString1 = commandString1 + "contacto = '" + habitante.Conyuge + "',";
                commandString1 = commandString1 + "telefono_contacto = '" + habitante.DniConyuge + "', ";
                commandString1 = commandString1 + "mascota = " + habitante.Mascota + ",";
                commandString1 = commandString1 + "tipo_formato = " + habitante.Formato + ",";
                commandString1 = commandString1 + "tipo_documento = '" + habitante.TipoDocumentoConyuge + "',";
                commandString1 = commandString1 + "id_departamento = " + habitante.IdDepartamento + " ";
                commandString1 = commandString1 + " WHERE id_persona = " + habitante.IdPersona + "";
                SqlCommand sqlCmd1 = new SqlCommand(commandString1, sqlCon);
                sqlCmd1.ExecuteNonQuery();

                sqlCon.Close();

                sqlCon.Open();

                string commandString = "SELECT * FROM persona a inner join habitante b on a.id_persona=b.id_persona where a.id_persona=" + habitante.IdPersona + " ";
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();
                HabitanteBean usuario2 = new HabitanteBean();

                if (dataReader.Read())
                {

                    usuario2.Nombre = Convert.ToString(dataReader["nombres"]);
                    usuario2.Apellidos = Convert.ToString(dataReader["apellidos"]);
                    usuario2.Genero = Convert.ToString(dataReader["genero"]);
                    usuario2.TipoDocumento = Convert.ToString(dataReader["tipo_documento"]);
                    usuario2.NroDocumentoPersona = Convert.ToString(dataReader["nro_documento_persona"]);
                    usuario2.Telefono = Convert.ToString(dataReader["telefono"]);
                    if (!string.IsNullOrEmpty(usuario2.Celular))
                    {
                        usuario2.Celular = Convert.ToString(dataReader["celular"]);
                    }
                    if (!string.IsNullOrEmpty(usuario2.Correo))
                    {
                        usuario2.Correo = Convert.ToString(dataReader["correo"]);
                    }
                    if (usuario2.Departamento > 0)
                    {
                        usuario2.Departamento = Convert.ToInt32(dataReader["id_departamento"]);
                    }
                    if (usuario2.Provincia > 0)
                    {
                        usuario2.Provincia = Convert.ToInt32(dataReader["id_provincia"]);
                    }
                    if (usuario2.Distrito > 0)
                    {
                        usuario2.Distrito = Convert.ToInt32(dataReader["id_distrito"]);
                    }
                    if (!string.IsNullOrEmpty(usuario2.Direccion))
                    {
                        usuario2.Direccion = Convert.ToString(dataReader["direccion"]);
                    }
                    if (usuario2.IdCargo > 0)
                    {
                        usuario2.IdCargo = Convert.ToInt32(dataReader["Id_Cargo"]);
                    }

                    if (usuario2.IdEdificio > 0)
                    {
                        usuario2.IdEdificio = Convert.ToInt32(dataReader["Id_Edificio"]);
                    }
                
                    if (usuario2.IdDepartamento > 0)
                    {
                        usuario2.IdDepartamento = Convert.ToInt32(dataReader["id_departamento"]);
                    }


                    usuario2.EsInquilino = Convert.ToInt32(dataReader["es_inquilino"]);

                    if (!(Convert.IsDBNull(dataReader["contacto"])))
                    {
                        usuario2.Conyuge = Convert.ToString(dataReader["contacto"]);
                    }
                    if (!(Convert.IsDBNull(dataReader["telefono_contacto"])))
                    {
                        usuario2.DniConyuge = Convert.ToString(dataReader["telefono_contacto"]);
                    }

                    if (usuario2.Mascota > 0)
                    {
                        usuario2.Mascota = Convert.ToInt32(dataReader["mascota"]);
                    }

                    if (usuario2.Formato > 0)
                    {
                        usuario2.Formato = Convert.ToInt32(dataReader["tipo_formato"]);
                    }
                    if (!(Convert.IsDBNull(dataReader["tipo_documento"])))
                    {
                        usuario2.TipoDocumentoConyuge = Convert.ToString(dataReader["tipo_documento"]);
                    }
                }

                listaUsuarios.Add(usuario2);

                dataReader.Close();
                sqlCon.Close();

                return listaUsuarios;
            }
            catch (Exception ex)
            {
                log.Error("listarHabitanteMod(EXCEPTION): ", ex);
                throw ex;
            }
        }


        public string eliminarUsuario(UsuarioBean usuario)
        {
            try
            {
                String me = "";

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
                sqlCon.Open();

                string commandString0 = "update persona set estado =0 ";
                commandString0 = commandString0 + " WHERE id_persona =" + usuario.IdPersona + " and estado=1";
                SqlCommand sqlCmd0 = new SqlCommand(commandString0, sqlCon);
                try
                {
                    sqlCmd0.ExecuteNonQuery();
                    me = "Bien";
                }
                catch
                {
                    me = "Hubo un error al eliminar";
                }


                sqlCon.Close();
                return me;
            }
            catch (Exception ex)
            {
                log.Error("EliminarEdificio(EXCEPTION): ", ex);
                throw ex;
            }
        }
    }
}
